// 引入数据库连接池，这个是用于连接数据库的
const pool = require('../tools/getPool');

// 引入返回操作
const sendResponse = require('../tools/sendResponse');

// 这个是一个函数，就是处理请求和要返回数据的，
// 其中req是请求体，res是响应体
module.exports = function(req, res){
	// 以下是从请求体中获取所要的东西，即账号密码和登录类型
	let account 	= req.body.account;
	let password 	= req.body.password;
	let type 		= req.body.type;

	// 如果这三个当中有任何一个是未定义的，返回params lack，即缺失参数
	if (account == undefined || password == undefined || type == undefined) {
		sendResponse('error', 'params lack', null, res);
		return;
	}

	// 获取连接池，如果获取成功，err参数为空
	pool.getConnection(function(err, connection) {
		// 当err不为空时，即获取连接池失败，返回以下内容
		if (err) {
			sendResponse('error','数据库内部错误', null, res);
			return;
		}
		// 执行到这里就表示获取成功了
		
		// 把账号和密码放进params数组
		let params = [account, password];

		// 如果type是admin的话，即用户是登录管理员
		if (type == 'admin') {
			// 用数据库的链接查询，并传入参数，该函数会返回error,和rows（结果），和fields（这个不需要用到)
			connection.query('SELECT account FROM admin WHERE account = ? and password = ?', params, function (error, rows, fields) {
				// 用完之后要释放连接
				connection.release();
				// 这个和上面那个一样意思，如果出现错误，则返回以下内容，不再往下执行
				if (error) { 
					sendResponse('error','数据库内部错误', null, res);
					return;
				} else {
					// 执行到这里就表示执行成功了
					// 如果能成功匹配到内容，即rows长度大于等于1
					if (rows.length >= 1) {
						// 在通讯标记里标记这个人已经登录，还有标记这个的账号，还有类型
						req.session.login = true;
						req.session.account = rows[0].account;
						req.session.type = type;
						// 包装结果，并返回
						let result = {
							account: rows[0].account,
							type: type
						}
						sendResponse('ok','login successed!', null, res);
						return;
					} else {
					// 这里是rows长度不等于1，即匹配不到。返回以下内容
						sendResponse('error','用户名或密码错误', null, res);
						return;
					}

				}

			})	

			// 如果type是clerk的话，即用户是业务员
		} else if (type == 'clerk') {
			// 同样是搜索数据库
			connection.query('SELECT id, account, department, name, type, able FROM clerk WHERE account = ? and password = ? and able = 1', params, function (error, rows, fields) {
				// 释放链接
				connection.release();
				// 如果遇到错误就返回
				if (error) { 
					sendResponse('error','数据库内部错误', null, res);
					return;

				} else {
					// 否则，查看结果长度，大于等于1表示有这个匹配
					if (rows.length >= 1) {
						// 在通讯标记里标记这个人已经登录，还有标记这个的账号，还有类型，还有其他东西
						req.session.login 		= true;
						req.session.account 	= rows[0].account;
						req.session.name 	= rows[0].name;
						req.session.able 		= rows[0].able;
						req.session.type 		= rows[0].type;
						req.session.id			= rows[0].id;
						// 包装结果，并返回
						let result = {
							account: rows[0].account,
							department: rows[0].department,
							name: rows[0].name,
							able: rows[0].able,
							type: rows[0].type
						}
						sendResponse('ok','login successed!', result, res);
						return;
					} else {
						sendResponse('error','用户名或密码错误', null, res);
						return;
					}

				}

			})	

		} else {

			sendResponse('error','params error', null, res);
			return;

		}



	});

}